%% PRBS方波添加边沿

clear all;
clf;
clc;
close all;

% fs=10;NN=1270;    %采样频率和数据点数；采样定理，频域最大的频率绝对值是时域采样间隔倒数的一半
% 
% n=0:NN-1;t=n/fs;  %时间序列
% f_p=1;
% f_c=10e6;

fs=10^6;%采样频率
T=1/fs;%采样点数
L=12700;%信号长度
t=(0:L-1)*T;%时间序列 
f=fs*(0:(L-1))/L;
binwidth = fs/length(t);
f_hz=[0:binwidth:fs-binwidth];%将点数转化为频率



%----PRBS---Start--------------------------------
% N = 127; % lenght of the PRBS sequence
N=127;
M = 100; % number of samples per bit
uk = idinput([N 1 100],'prbs',[0 1],[-1 1]);
if M<1 
    fprintf('\t\t ERROR\t\t\n');
    fprintf('Number of samples per bit is less than 1\n');
    return;
end
for k=1:N
    if (uk(k) == -1)
        for i=1:M
        waveformTemp(k,i) = [-1];
        end
        waveform{k} = waveformTemp(k,:);
    elseif (uk(k) == 1)
        for i=1:M
        waveformTemp(k,i) = [1];
        end
        waveform{k} = waveformTemp(k,:);
    end  
end
PRBSwave = cell2mat(waveform);
plot(PRBSwave);
plot(t,abs(fftshift(fft(PRBSwave))));
plot(t,fft(PRBSwave));

%产生上升沿和下降沿
t1=0:1/M:1-1/M; %周期为1的点，作为时间序列
% rc=0.03;%rc作为调整上升沿时间的参数
rc=0.001;%用来模拟上升沿下降沿的RC函数中的rc，量越小，下降沿占比越低。 
vt=1-exp(-(t1)/rc);%作为上升沿
vt1=exp(-t1/rc); %作为下降沿

for i=1:M  %截取一段下降沿，链接到PRBS信号上。
    if vt1(i)<0.001
        a=i;
        break
    end
end
plot(t1,vt1);
% Y = circshift(vt1,M-a);
% plot(t1,Y);
PRBSwave=0.5*PRBSwave;
Z=PRBSwave;
%----将rc加到PRBS信号上----%需要确认何时PRBS信号从0-1，和何时从1-0。()
for i=1:N-1
    if PRBSwave(i*M)==-0.5&&PRBSwave(i*M+1)==0.5
        for j=1:M
            Z(i*M+j)=PRBSwave(i*M+j)+vt(j)-1;
        end
    end
    
    if PRBSwave(i*M)==0.5&&PRBSwave(i*M+1)==-0.5
        for j=1:a
            Z(i*M+j)=PRBSwave(i*M+j)+vt1(j);
        end
    end
end
% Z=Z;%将信号向上平移。
plot(Z);
plot(t,abs(fftshift(fft(Z))));
plot(t,fft(Z));


save('Z.mat',"Z",'t1','M',"N","PRBSwave");%将数据保存在z.mat中，方便读取。